#!/usr/bin/env python
# encoding: utf-8
# author: 04

""" 放各种魔法数字及配置数字等，与Model不直接相关的逻辑运行相关配置
"""
from decimal import Decimal as _D

# 考虑网络延时或机器卡顿，最长允许冗余时间
LAG_DELAY = 2

# 最长回答时间
MAX_ANSWER_DELAY = 20

# 错误显示解释的时间
SHOW_EXPLAIN_DELAY = 5

# 时间
QUESTION_TIMEUP = MAX_ANSWER_DELAY + SHOW_EXPLAIN_DELAY


# 临时缓存超时时间(秒)
FLASH_STORAGE_TIMEOUT = 60


# 净网统票时间梯度，对用户体验20秒锁定，后台判断延长2秒锁定，减小网络延时影响，统票统一延时最低24秒
PURIFY_ANSWER_FREEZE = 20
PURIFY_ANSWER_FREEZE_BACK = 22
PURIFY_ANSWER_FREEZE_VOTE = 24

# (投票时) 低于及格线数量的没有净网权重
PURIFY_COUNT_CUT_OFF_LINE = 100


# 关卡总星数
FULL_STARS = 3


# 练习题超时时间(秒)
PRACTICE_AUDIT_EXPIRE_TIME = 600

PURIFY_SUB_QUEUE_EXPIRE = 600         # 10分钟后子缓存队列中数据超时，要求APP重新拉取数据，避免数据长时间被一个人持有不做题
PURIFY_ACTIVE_TIME_EXPIRE = 60 * 3.1  # 3.1分钟无动作清空整个队列 (app端为3分钟超时，如果有调整则同步做修改)
WEB_ACTIVE_TIME_EXPIRE = 60 * 60      # web页面超时,不再允许答题，同时checkdata将数据恢复到主队列


# 最小净网投票权重， 避免过低权重导致新人投票完全无效
MIN_VOTE_WEIGHT = _D('36')


# rank 冲关星级间隔
#  此处为两个比例值，即 冲关耗时/冲关允许的总时间 的比值，此两个数值将(0, 1)的区间截断为三段，分别对应三、二、一星级
#  没有冲关成功的不经过此计算，星级为零星
RANK_STEP = (0.5, 0.25)


class ERROR_CODE:

    # 请求数据问题
    APP_BUG = 1001
    CONTINUE_EXAM = 1002
    # 净网答案锁定
    ANSWER_FREEZE = 1003
    # 运营、配置数据问题
    OPERATER_BUG = 2001


# 单人可参与班次数量
MAX_SCHEDULE_COUNT = 10
